package com.springboot.fram.core.lang;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 * <pre>
 * 包含常用的正则的校验
 * </pre>
 *
 madman */
public final class RegexpUtils {

    private RegexpUtils() {
    }

    public static boolean matched(String source, String regex) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(source);
        return m.matches();
    }

    /**
     * 校验昵称
     *
     * @param name 待验证的昵称
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isName(String name) {
        return Pattern.matches(Regex.NAME, name);
    }

    /**
     * 校验用户名
     *
     * @param username 带检验的用户名
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isUsername(String username) {
        return Pattern.matches(Regex.USERNAME, username);
    }

    /**
     * 校验密码
     *
     * @param password 密码
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isPassword(String password) {
        return Pattern.matches(Regex.PASSWORD, password);
    }

    /**
     * 校验手机号
     *
     * @param mobile 手机号
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isMobile(String mobile) {
        return Pattern.matches(Regex.MOBILE, mobile);
    }

    /**
     * 校验邮箱
     *
     * @param email 邮箱地址
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isEmail(String email) {
        return Pattern.matches(Regex.EMAIL, email);
    }

    /**
     * 校验汉字
     *
     * @param chinese 中文字符
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isChinese(String chinese) {
        return Pattern.matches(Regex.CHINESE, chinese);
    }

    /**
     * 校验数字
     *
     * @param number 数字
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isNumber(String number) {
        return Pattern.matches(Regex.NUM, number);
    }

    /**
     * 校验身份证
     *
     * @param idCard 身份证号码
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isIDCard(String idCard) {
        return IdCardUtils.isValidCard(idCard);
    }

    /**
     * 校验URL
     *
     * @param url URL地址
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isUrl(String url) {
        return Pattern.matches(Regex.URL, url);
    }

    /**
     * 校验IP地址
     *
     * @param ipAddr IP地址
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isIPAddr(String ipAddr) {
        return Pattern.matches(Regex.IP_ADDR, ipAddr);
    }

    /**
     * 校验生日
     *
     * @param birthday 出生日期
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isBirthDay(String birthday) {
        return Pattern.matches(Regex.BIRTHDAY, birthday);
    }

    /**
     * 金额验证
     *
     * @param mony
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isMony(String mony) {
        if("0".equals(mony)||"0.0".equals(mony)||"0.00".equals(mony)){
            return false;
        }
        return Pattern.matches(Regex.MONY, mony);
    }


    /**
     * 车牌号验证
     *
     * @param hphm
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isHphm(String hphm) {
        return Pattern.matches(Regex.HPHM, hphm);
    }

    /**
     * 是否包含特殊字符
     *
     * @param specialCharacters
     * @return
     */
    public static boolean isSpecialCharacters(String specialCharacters) {
        Pattern p = Pattern.compile(Regex.SPECIAL_CHARACTERS);
        Matcher m = p.matcher(specialCharacters);
        return m.find();
    }

}
